const OAuth = require('wechat-oauth')
const WECHAT_CONFIG = require('./config')
const fs = require('fs')
const AV = require('leanengine')

// module.exports = new OAuth(WECHAT_CONFIG.appid, WECHAT_CONFIG.appsecret)
module.exports = new OAuth(WECHAT_CONFIG.appid, WECHAT_CONFIG.appsecret, function (openid, callback) {
  // 传入一个根据openid获取对应的全局token的方法
  // 在getUser时会通过该方法来获取token
  // fs.readFile(openid +':access_token.txt', 'utf8', function (err, txt) {
  //   console.log('fs')
  //   console.log(err)
  //   if (err) {return callback(err);}
  //   callback(null, JSON.parse(txt));
  // });
  new AV.Query('OAuthToken').equalTo('openid', openid).find().then(ret => {
    callback(null, ret[0].get('token'))
  })
}, function (openid, token, callback) {
  // 请将token存储到全局，跨进程、跨机器级别的全局，比如写到数据库、redis等
  // 这样才能在cluster模式及多机情况下使用，以下为写入到文件的示例
  // 持久化时请注意，每个openid都对应一个唯一的token!
  // fs.writeFile(openid + ':access_token.txt', JSON.stringify(token), callback);
  var query = new AV.Query('OAuthToken')
  query.equalTo('openid', openid)
  query.find().then(ret => {
    console.log(ret)
    if (!ret.length) {
      new AV.Object('OAuthToken')
      .save({openid, token}).then(ret => {
        console.log(ret)
        callback()
      }).catch(err => console.log(err))
    } else {
      ret[0].save({token}).then(callback)
    }
  })
})
